/* 
 * File:   pessoa.h
 * Author: Vagner Clementino
 *
 * Created on 11 de Março de 2012, 10:27
 */

typedef struct{
    char sexo;
    int id; /*Identificador da pessoa*/
    int* lista_preferencia;
    int tam_lista_pref;
    int conjuge; /*Indica o id com o qual a pessoa se casou. 
                  *-1 indica solteiro*/
    int ultimo_pretendente; /*Indica o indice do vetor lista_preferencia
                             *da ultimo pretendente que a pessoa tentou
                             * se casar (vide algoritmo).                   
                             */    
}Pessoa;

typedef Pessoa* Mulher;
typedef Pessoa* Homem;

/*Cria dinamicamente uma estrutura do tipo Pessoa*/
Pessoa* cria_pessoa(char sexo, int id, int* lista_preferencia, int tam_lista);


/*Libera espaco alocado para uma struct do tipo Pessoa*/
void desaloca_pessoa(Pessoa* p);

/*Define a lista de preferencia de uma pessoa com base em uma string cujos
 * inteiros estao separados por espaco */
void define_lista_preferencia(Pessoa** p,int* lista_pref);

/*Imprime as informações contidas na estrutura do tipo Pessoa apontada pelo
 *ponteiro p */
void imprime_pessoa(const Pessoa* p);

/*Dada uma pessoa retorna o id da pessoa mais bem colocada em sua lista de 
 * preferencia para qual ela ainda nao tentou formar um par */
int retorna_pretendente(Pessoa* p);

/*Retorna o grau de preferencia de um pretedente
 * com base na lista de preferencia de uma pessoa.
 * Quanto menor o valor retornado maior o grau de
 * preferencia do pretendente. Se o id informando
 * nao estiver na lista de preferencia o metodo
 * retorna -1 */
int grau_de_preferencia(Pessoa* p, int id_pretedente);